import java.util.Stack;
//设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
//力扣题号：155 最小栈
//实现 MinStack 类:
//
//MinStack() 初始化堆栈对象。
//void push(int val) 将元素val推入堆栈。
//void pop() 删除堆栈顶部的元素。
//int top() 获取堆栈顶部的元素。
//int getMin() 获取堆栈中的最小元素
class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> minstack;
    int min ;
    public MinStack() {
        stack = new Stack<>();
        minstack = new Stack<>();
        int min = 0;

    }

    public void push(int val) {
        this.stack.push(val);
        if(minstack.empty()){
            minstack.push(val);
            min = val;
            return;
        }else if(min>=val){
            minstack.push(val);
            min = val;
            return;
        }else{
            return;
        }
    }



    public void pop() {
        if(stack.empty()){
            return ;
        }
        int t = stack.peek();
        stack.pop();

        if(!minstack.empty()&&t==minstack.peek()){
            minstack.pop();
            if(!minstack.empty()){
                min = minstack.peek();
            }

        }

    }

    public int top() {
        if(stack.empty()){
            return -1;
        }
        return stack.peek();
    }

    public int getMin() {
        if(minstack.empty()){
            return -1;
        }
        return minstack.peek();
    }
}


/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */